其他
【10-5】做数据分析,要不要掌握Linux系列:shell编程之集群自动部署!
1、什么是“集群自动部署”?
2、把需要安装的东西放到http服务器上面去。
# 你需要经历如下几步:
1)虚拟机的httpd服务是否开启。你目前可以一直设置开机自启
[root@image1 ~]# chkconfig --level 35 httpd on
2) 虚拟机的防火墙是否关闭。你目前可以一直设置开机关闭
[root@image1 ~]# chkconfig --level 35 iptables off
3)把jdk-8u73-linux-x64.tar.gz这个安装包,放置到http服务器上面去。
[root@image1 ~]# cp jdk-8u73-linux-x64.tar.gz /var/www/html/
4)检验。你可以去浏览器上打开你自己的http网页,看看是否可以下载。
3、先讲解几个知识点:wget、EOF、expect人机交互
1)wget
[root@image1 ~]# yum install wget
2)从http服务器上面下载,我们放置的安装软件jdk-8u73-linux-x64.tar.gz
[root@image1 ~]# wget "http://192.168.2.101/jdk-8u73-linux-x64.tar.gz"
2)EOF
-----------------------------
<<EOF //开始标志
....
在这里写入内容
....
EOF //结束标志
-----------------------------
执行脚本的时候,需要往一个文件里自动输入多行内容。如果是少数的几行内容,
还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得
愚蠢之极了!这个时候,就可以使用EOF结合cat命令进行行内容的追加了。
Ⅰ EOF配合cat使用:要么追加,要么覆盖原内容。
Ⅱ 使用echo追加内容,少数几行还可以,多了这样写的话太麻烦了。
Ⅲ 使用cat + EOF的方式。
3)expect人机交互
4、进行“集群自动部署”脚本的编写。
1)原理说明
2)自动安装的脚本:autoInstall.sh
# 1)下载
wget "http://192.168.2.101/jdk-8u73-linux-x64.tar.gz"
# 2)创建目录并解压解压
mkdir -p /usr/local/java
tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local/java
# 3)配置:利用she'l'l脚本,往配置文件中追加内容
cat>>/etc/profile<<EOF
export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
# 4)重新加载
source /etc/profile
# 5)测试
java -version
# 6)删除安装包
rm -rf /root/jdk-8u73-linux-x64.tar.gz
# 7)测试程序是否执行到了最后一行
echo "我已经执行到最后一行了"
3)发送autoInstall.sh安装脚本到image2和image3这两台机器的脚本:send.sh
services=(192.168.2.102 192.168.2.103)
# yum install -y expect
for service in ${services[*]}
do
scp -r autoInstall.sh root@$service:/root
ssh $service sh autoInstall.sh
# 人机交互
expect -c "
expect {
\"~]#\" {send \"exit\r\";exp_continue;}
}
"
echo "${service} 退出登录"
done
4)免密登录的脚本:key.sh
expect -c "
spawn echo "我要开始生成密钥对了"
spawn ssh-keygen
expect {
\"/root/.ssh/id_rsa):\" {send \"\r\";exp_continue;}
\"(empty for no passphrase):\" {send \"\r\";exp_continue;}
\"passphrase again:\" {send \"\r\";exp_continue;}
}
"
services=(192.168.2.101 192.168.2.102 192.168.2.103)
for service in ${services[*]}
do
# 人机交互
expect -c "
spawn ssh-copy-id $service
expect {
\"yes/no)?\" {send \"yes\r\";exp_continue;}
\"password:\" {send \"123456\r\";exp_continue;}
}
"
done
----------End----------